﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LeetCode
{
   public  class _290WordPattern :IRun
    {
        /*
         * 给定一种 pattern(模式) 和一个字符串 str ，判断 str 是否遵循相同的模式。

           这里的遵循指完全匹配，例如， pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式。

           示例1:
           输入: pattern = "abba", str = "dog cat cat dog"
           输出: true

           示例 2:
           输入:pattern = "abba", str = "dog cat cat fish"
           输出: false

           示例 3:
           输入: pattern = "aaaa", str = "dog cat cat dog"
           输出: false

           示例 4:
           输入: pattern = "abba", str = "dog dog dog dog"
           输出: false
           说明:
           你可以假设 pattern 只包含小写字母， str 包含了由单个空格分隔的小写字母。
         */
        public void Run()
        {

        }

        public bool WordPattern(string pattern, string str)
        {
            char[] p = pattern.ToArray();
            string[] strs = str.Split(' ');
            if (p.Length != strs.Length)
                return false;

            Dictionary<string, string> _KeyValues = new Dictionary<string, string>();
            for (int i = 0; i < p.Length; i++)
            {
                // 如果key存在，比较值是否相等；
                if (_KeyValues.ContainsKey(p[i].ToString()))
                {
                    if (_KeyValues[p[i].ToString()] != strs[i])
                        return false;
                }// 如果key不存在，且value也不存在,字典中没有对应数据
                else if (!_KeyValues.ContainsValue(strs[i]))
                {
                    _KeyValues.Add(p[i].ToString(), strs[i]);
                }// 如果key不存在，value却存在，说明多个key对应同一value，不符合要求；
                else  
                    return false;
            }
            return true;
        }
    }
}
